A program running resource such as memory, a file handle, a semaphore, a database connection pool, or a thread pool is a critical resource needed when a program runs. During running, a program applies for a resource when needing to use a program running resource and releases the occupied program running resource in time when the use ends. If the occupied program running resource is not released in time, a program running resource a leak problem occurs. The program running resource a leak problem is described below using memory leak as an example.
Memory leak refers to that a design or encoding problem causes a program not to release in time memory that is no longer used, resulting in increasingly less memory available in a system. With long time running of the program, memory leak becomes increasingly severe, and eventually a service is damaged or interrupted because of insufficient memory in the system. Memory leak is a problem that occurs easily and is difficult to avoid during program running. As software becomes increasingly large in scale and increasingly complex, a probability of occurrence of memory leak in a system also becomes increasingly high.
For the memory leak problem, one of the existing methods of detecting memory leak is a static analysis method. In this method, a program does not need to be run, and instead program code is analyzed manually or using an automatic tool, to examine matching between allocation and release of memory in the code. In a case of a relatively simple correspondence between allocation and release of memory, the static analysis method can usually effectively detect potential memory leak; however, in a case of a relatively complex correspondence between allocation and release of memory, for example, allocation of memory in one function and release of the corresponding memory in one or even more other functions, an error is easily reported falsely or not reported in the static analysis method an error is easily reported falsely or not reported.
Another existing method of detecting memory leak is to detect memory leak by dynamically monitoring allocation and release of memory during program running in combination with determining of a life cycle of memory. On one hand, the method needs to manage allocation and release of all related memory in a program and needs to accurately determine a life cycle of memory, resulting in complex implementation and large impact on system performance. On the other hand, to implement takeover of a memory allocation function and a release function, a corresponding code modification needs to be made according to a specific application program, and determining of a life cycle of a memory also depends on a specific application scenario; therefore, the method is closely related to a specifically detected target system, and is relatively not overall.
In addition, in the prior art it can only be detected whether there is memory leak; a prediction cannot be provided for a future memory usage condition, for example, time when memory is to be exhausted or time when memory usage is to reach a set threshold.